"""
面向对象，数据分析案例，主业务逻辑代码
实现步骤：
1、设计一个类，可以完成数据的封装
2、设计一个抽象类，定义文件读取的相关功能，并使用子类实现具体功能
3、读取文件，生产数据对象
4、进行数据需求的逻辑计算（计算每一天的销售额）
5、通过PyEcharts进行图形绘制
"""

from file_define import *
from data_define import Record
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType

path_txt = f"{os.getcwd()}/2011年1月销售数据.txt"
path_json = f"{os.getcwd()}/2011年2月销售数据JSON.txt"

text_file_reader = TextFileReader(path_txt)
json_file_erader = JsonFileReader(path_json)

jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_erader.read_data()

# 将两个月的数据合并在一起
all_data: list[Record] = jan_data + feb_data

# 开始进行数据计算
data_dict = dict()
for rec in all_data:
    if rec.date in data_dict.keys():
        # 当前日期已经有记录了，直接做累加
        data_dict[rec.date] += rec.money
    else:
        # 当前日期没有记录，直接赋值
        data_dict[rec.date] = rec.money

# 可视化图表开发
bar = Bar(
    init_opts=InitOpts(theme=ThemeType.LIGHT)
)

# 设置图表数据
print(list(data_dict.values()))
bar.add_xaxis(list(data_dict.keys()))
bar.add_yaxis("销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False))

# 设置全局属性
bar.set_global_opts(
    title_opts=TitleOpts(title="2011年1-2月每日销售额", pos_left="center", pos_bottom="1%"),
    legend_opts=LegendOpts(is_show=True)
)

# 绘图
bar.render("每日销售额柱状图.html")
